package com.cavasmonitor;

import java.util.ArrayList;
import java.util.List;

import com.cavasmonitor.db.CavasDao;
import com.cavasmonitor.to.EquipoTo;
import com.cavasmonitor.to.UsuarioTo;
import com.cavasmonitor.util.Session;
import com.cavasmonitor.util.Utils;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;

public class EquipoActivity extends Activity {

	Spinner s;
	Long id;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.equipos);

		id = 0L;

		ImageButton img = (ImageButton) findViewById(R.id.btnHome);

		img.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				Intent i = new Intent(EquipoActivity.this,
						OpcionesActivity.class);
				startActivityForResult(i, 1);
			}
		});

		img = (ImageButton) findViewById(R.id.btnExit);

		img.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {

				new AlertDialog.Builder(EquipoActivity.this)
						.setTitle(R.string.msg_salir)
						.setMessage(R.string.msg_logout)
						.setPositiveButton(R.string.msg_aceptar,
								new DialogInterface.OnClickListener() {
									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										Session.usuario = null;
										Intent i = new Intent(
												EquipoActivity.this,
												MainActivity.class);
										startActivityForResult(i, 1);
									}
								})
						.setNegativeButton(R.string.msg_cancelar, null).show();

			}
		});

		CavasDao dao = new CavasDao(EquipoActivity.this);
		dao.open();

		List<EquipoTo> equipos = dao.getEquipos();
		List<String> list = new ArrayList<String>();

		list.add("Seleccione el equipo a editar");
		if (equipos != null && !equipos.isEmpty())
			for (EquipoTo e : equipos) {
				list.add(e.getNombre() + " P:" + e.getPunto());
			}
		s = (Spinner) findViewById(R.id.spiEquipos);
		ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
				this, android.R.layout.simple_spinner_item, list);
		spinnerArrayAdapter
				.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		s.setAdapter(spinnerArrayAdapter);

		dao.close();

		Button btn = (Button) findViewById(R.id.btnGuardar);

		btn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {

				String nombre = ((EditText) findViewById(R.id.inputNombre))
						.getText().toString().trim();
				String desc = ((EditText) findViewById(R.id.inputDesc))
						.getText().toString().trim();
				Long punto = (((EditText) findViewById(R.id.inputPunto))
						.getText().toString().trim().length() == 0) ? 0L : Long
						.parseLong(((EditText) findViewById(R.id.inputPunto))
								.getText().toString().trim());

				List<String> puntos = Utils.getPuntos(EquipoActivity.this);

				if (nombre.length() == 0) {
					new AlertDialog.Builder(EquipoActivity.this)
							.setTitle(R.string.msg_atencion)
							.setMessage(R.string.msg_eq_nb_req)
							.setNeutralButton(R.string.msg_aceptar, null)
							.show();
				} else if (nombre.length() < 4) {
					new AlertDialog.Builder(EquipoActivity.this)
							.setTitle(R.string.msg_atencion)
							.setMessage(R.string.msg_eq_nb_len)
							.setNeutralButton(R.string.msg_aceptar, null)
							.show();
				} else if (desc.length() == 0) {
					new AlertDialog.Builder(EquipoActivity.this)
							.setTitle(R.string.msg_atencion)
							.setMessage(R.string.msg_eq_des_req)
							.setNeutralButton(R.string.msg_aceptar, null)
							.show();
				} else if (desc.length() < 4) {
					new AlertDialog.Builder(EquipoActivity.this)
							.setTitle(R.string.msg_atencion)
							.setMessage(R.string.msg_eq_des_len)
							.setNeutralButton(R.string.msg_aceptar, null)
							.show();
				} else if (punto == 0) {
					new AlertDialog.Builder(EquipoActivity.this)
							.setTitle(R.string.msg_atencion)
							.setMessage(R.string.msg_eq_punto_req)
							.setNeutralButton(R.string.msg_aceptar, null)
							.show();
				} else if (puntos.isEmpty()) {
					new AlertDialog.Builder(EquipoActivity.this)
							.setTitle(R.string.msg_atencion)
							.setMessage(R.string.msg_punto_notcox)
							.setNeutralButton(R.string.msg_aceptar, null)
							.show();
				} else if (puntos.size() < punto) {
					new AlertDialog.Builder(EquipoActivity.this)
							.setTitle(R.string.msg_atencion)
							.setMessage(
									R.string.msg_punto_max)
							.setNeutralButton(R.string.msg_aceptar, null)
							.show();
					new AlertDialog.Builder(EquipoActivity.this)
					.setTitle(R.string.msg_atencion)
					.setMessage(
							"Puntos Disponibles: " + punto)
					.setNeutralButton(R.string.msg_aceptar, null)
					.show();
				} else {

					CavasDao dao = new CavasDao(EquipoActivity.this);
					dao.open();

					EquipoTo equipo = dao.getEquipoPorPunto(punto);

					EquipoTo update = new EquipoTo();
					if (id != 0) {
						update = dao.getEquipo(id);
					}

					if (equipo != null && id == 0) {
						new AlertDialog.Builder(EquipoActivity.this)
								.setTitle(R.string.msg_atencion)
								.setMessage(R.string.msg_eq_punto_ocu)
								.setNeutralButton(R.string.msg_aceptar, null)
								.show();
					} else if (id > 0 && update.getPunto() != punto
							&& equipo != null) {
						new AlertDialog.Builder(EquipoActivity.this)
								.setTitle(R.string.msg_atencion)
								.setMessage(R.string.msg_eq_punto_rep)
								.setNeutralButton(R.string.msg_aceptar, null)
								.show();
					} else {

						equipo = new EquipoTo();
						equipo.setId(id);
						equipo.setNombre(nombre);
						equipo.setDescripcion(desc);
						equipo.setPunto(punto);

						if (id == 0) {
							dao.createEquipo(equipo);
						} else {
							dao.updateEquipo(equipo);
						}

						new AlertDialog.Builder(EquipoActivity.this)
								.setTitle(R.string.msg_atencion)
								.setMessage(R.string.msg_eq_succ)
								.setNeutralButton(R.string.msg_aceptar, null)
								.show();

						dao.close();

						Intent i = new Intent(EquipoActivity.this,
								EquipoActivity.class);
						startActivityForResult(i, 1);
					}

					dao.close();
				}
			}
		});

		s.setOnItemSelectedListener(new OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parentView,
					View selectedItemView, int position, long idx) {

				if (position > 0) {

					CavasDao dao = new CavasDao(EquipoActivity.this);
					dao.open();

					Long punto = Long.valueOf(s
							.getSelectedItem()
							.toString()
							.trim()
							.substring(
									s.getSelectedItem().toString().trim()
											.lastIndexOf("P:") + 2));

					EquipoTo equipo = dao.getEquipoPorPunto(punto);

					id = equipo.getId();

					EditText edt = (EditText) findViewById(R.id.inputNombre);
					edt.setText(equipo.getNombre());

					edt = (EditText) findViewById(R.id.inputDesc);
					edt.setText(equipo.getDescripcion());

					edt = (EditText) findViewById(R.id.inputPunto);
					edt.setText(equipo.getPunto().toString());

				} else {
					id = 0L;

					EditText edt = (EditText) findViewById(R.id.inputNombre);
					edt.setText("");

					edt = (EditText) findViewById(R.id.inputDesc);
					edt.setText("");

					edt = (EditText) findViewById(R.id.inputPunto);
					edt.setText("");
				}
			}

			@Override
			public void onNothingSelected(AdapterView<?> parentView) {
				// your code here
			}
		});
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Intent i;
		switch (item.getOrder()) {
		case Session.M_USUARIOS:
			i = new Intent(EquipoActivity.this, UsuariosActivity.class);
			startActivityForResult(i, 1);
			return true;
		case Session.M_CFG:
			i = new Intent(EquipoActivity.this, ConfiguracionActivity.class);
			startActivityForResult(i, 1);
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		if (Session.usuario.getRol() == UsuarioTo.Rol.ADMINISTRADOR) {
			getMenuInflater().inflate(R.menu.main, menu);
		} 
		return true;
	}

}
